嗨!各位朋友大家好,打給後,歹嘎吼,胎尬喉,我是阿圓,開始之前有請今天的one piece!
(羅賓超美的啦!)
咳!昨天我們說到了 rails 裡面的 routes 設計,不過使用的都是單複數 resource(s) 的方式,而用這樣的方式所製作出來的路徑是固定的(依循REST principles 的 RESTful 的路徑)。
但專案總是有許多需求,若我不想使用預設的那些路徑呢?
我們可以使用get "路徑", to "controller#action"
,這個方式來指定輸入什麼網址後要交由哪一個controller的action:
Rails.application.routes.draw do
get "/home", to: "pages#index"
end
上面第2行的意思是,當使用者輸入/home
這個網址後,會交由pages controller裡的index這個action做處理。
(其實還有很多變化,詳情請看為你自己學Ruby on Rails)
若是 rails 內建的路徑不夠用,我們可以使用collection、member,來新增我們要的路徑
若想要看到所有已被認證的官方使用者(像Facebook或Instagram的藍勾勾),此時不需要指定使用者的編號,這樣的情況就可以使用 collection 來處理 :
Rails.application.routes.draw do
resources :users do
collection do
get :confirmed
end
end
end
此時路徑會有:
若不想用block,也可以寫成:
Rails.application.routes.draw do
resources :users do
get :confirmed, on: :collection
end
end
效果一樣。(若想新增的路徑不只一條,還是用 block 比較好。)
若想列出3號使用者正在追蹤的人,那網址的設計可能是這樣:/users/2/following
,必須要先指定 user 的編號(id),此時就可以用 member 來處理:
Rails.application.routes.draw do
resources :users do
member do
get :following
end
end
end
此時的路徑會有:
這個時候會發現多了一條following的路徑,而且是由 users controller 裡的 following 這個 action 處理的,並需要指定 user 的編號,一樣可以不用 block 寫:
Rails.application.routes.draw do
resources :users do
get :following, on: :member
end
end
若今天只想做出的路徑,有些需要指定使用者編號,有些不需要,我們可以用only 或 except 來做處理。
Rails.application.routes.draw do
resources :users do
recources :post, only: [:index, :new, :create]
end
resources :posts, except: [:index, :new, :create]
#這邊是為了示範,建議都用only或都用except,不然思緒換來換去的,增加閱讀困擾
end
讓我解釋一下上面的code:
通常建立文章的時候,我們會需要指定使用者的編號(這樣才知道是誰的文章),但是當文章建立好後,就不需要了,因為文章本身就有自己的流水編號,指定使用者給他是沒有意義的,而且網址會很長!
這樣的設計是比較合理的,所以 Rails 已經有幫我們建好比較好寫的寫法了:
Rails.application.routes.draw do
resources :users do
resources :posts, shallow: true
end
end
這樣就可以達到一樣的效果,建立出:
好的,routes的部份到這裡告一段落,感謝各位看到這邊,若有任何建議,請各位不吝指教!我們明天見!
什麼是REST跟RESTful?
RailsGuides - Routing
為你自己學Ruby on Rails